import { Vec3 } from 'cc';
import { GridType, SlotColor } from '../../Data/Types';
import { Task } from '../../Util/CustomTask';

export interface BoxData {
  /** 数量 */
  count: number;
  /** 皮肤 */
  skin: string[];
  /** 颜色限制 */
  colorLimit: string[];
  /** 隐藏限制 */
  hideLimit: boolean[];
  /** 锁住限制 */
  lockLimit: boolean[];
  /** 蒙版限制 */
  maskLimit: boolean[];
  /** 冰冻限制限制 */
  iceLimit: boolean[];
}
/** 猫咪数据 */
export interface CatData {
  skin: SlotColor;
  colorLimit: SlotColor;
  hideLimit: boolean;
  lockLimit: boolean;
  maskLimit: SlotColor;
  isFreeze: boolean;
  isRefresh: boolean;
  isGenerator: boolean;
  isCache: boolean;
  generatorHeight: number;
}

export interface BottleData {
  /**
   * 插槽颜色
   */
  skin: SlotColor[];
  /**
   * 隐藏限制
   */
  hideLimit: boolean[];
  /**
   * 锁住限制
   */
  lockLimit: boolean[];
  /**
   * 蒙版颜色
   */
  maskLimit: SlotColor;
  /**
   * 瓶子颜色
   */
  colorLimit: SlotColor;
  /**
   * 是否生成器
   */
  isGenerator: boolean;
  /**
   * 生成器高度
   */
  generatorHeight: number;
  /**
   * 是否刷新管
   */
  isRefresh: boolean;
  /**
   * 是否冰冻管
   */
  isFreeze: boolean;
  /**
   * 是否暂存管
   */
  isCache: boolean;
}

export interface SolutionStep {
  step: number;
  from: number;
  to: number;
  count: number;
}

export const AllColor = [
  SlotColor.Red_1,
  SlotColor.Yellow_1,
  SlotColor.Blue_1,
  SlotColor.Blue_2,
  SlotColor.Green_1,
  SlotColor.Green_2,
  SlotColor.Orange_1,
  SlotColor.Pink_1,
  SlotColor.Purple_1,
  SlotColor.Brown_1,
];

/** 记录关卡数据 */
export interface LevelData {
  /** 关卡序号 */
  level: number;
  /** 关卡小关序号 */
  wake: number;

  /** 时间 */
  time: number;
  /** 关卡完成度 */
  progress: number;
  /** 瓶子数据 */
  bolletData: BottleData[];

  seatData: {
    seatArr: { color: SlotColor; i: number; j: number }[];
    slotArr: { color: SlotColor; i: number; j: number }[];
  };
  /** 积木数据 */
  blockData: CatData[][];
}

/** 子对象数据 */
export interface RoleData {
  type: GridType;
  id: number;
  hp: number;
  hpMax: number;
  atk: number;
  atkRange: number;
  atkMax: number;
}

/** 子弹数据 */
export interface ButtleData {
  level: number;
  ePos: Vec3;
  flySpeed: number;
  damage: number;
  callHandler: Task.next;
}
